const jwt = require("express-jwt")
const {SECRET_KEY} = require("../utils/config")

const usersRouter = require("./users")

module.exports = function (app) {
  app.use(
    jwt({
      secret: SECRET_KEY, // 加密 token 的秘钥
      algorithms: ["HS256"], // 与生成 token密钥对应
    }).unless({
      // 选择一些不受保护的路径
      path: ["/users/login", "/favicon.ico", /^\/public\/.*/],
    })
  )

  // 用户 API
  app.use("/users", usersRouter)

  // 404
  app.use(function (req, res, next) {
    next(createError(404))
  })

  // 500
  app.use(function (err, req, res, next) {
    console.log("服务器错误：", err)

    if (err.name === "UnauthorizedError") {
      // 这个需要根据自己的业务逻辑来处理
      res.status(401).json({
        message: "invalid token",
        error: err,
      })
      return
    }

    // set locals, only providing error in development
    res.locals.message = err.message
    res.locals.error = req.app.get("env") === "development" ? err : {}

    // render the error page
    res.status(err.status || 500).json({
      message: "server 500",
      error: err,
    })
  })
}
